昨天提到了 Deployment
與 Pod
之間的差異,今天再來仔細的說一下什麼是 Deployment
元件,Deployment
可以算是 Kubernetes
中最常用到的元件之一,Deployment
跟 Pod
相同但卻更強大,通常在建立新的 Deployment
時,會同時建立 ReplicaSet
, 接著 ReplicaSet
會在建立 Pod
,在建立的過程中 Deployment
會一併檢查是否能正常啟動,例如:「image 是否存在」、「yaml 檔案規則是否正確」
另外,每次透過 Deployment
在更新服務版本時,也會觸發檢查機制,若檢查不通過 Deployment
不會讓新服務上線,繼續維持舊版服務,確保服務正常。
Deployment
可以達成以下幾件事情:Pod
服務,滿足更高負載執行 kubectl apply -f deployment.yml
## deployment.yml
apiVersion: extensions/v1beta1 ## 選擇 api server 要存取的 api 版本
kind: Deployment ## 指定為 Deployment 物件
metadata: ## 用來描述 Deployment 物件的資料
name: nginx ## Deployment 的名稱
labels: ## 賦予 Deployment 元件的標籤(service: http-server)
service: http-server
spec:
replicas: 3 ## 運行 3 個 Pod
selector: ## 指定 Deployment 管理的 Pod 規則
matchLabels: ## Pod 必須具備 service: http-server 的標籤
service: http-server
template:
metadata: ## 賦予 Pod具備 service: http-server 的標籤
labels:
service: http-server
spec:
containers: ## 描述容器的資料
- name: nginx-deploy ## 容器名稱
image: nginx ## 容器映像檔
ports: ## 指定容器 Port 號
- containerPort: 80
Service
與 Deployment
溝通## service.yml
apiVersion: v1 ## k8s api 版本號
kind: Service ## 指定為 Service 物件
metadata: ## 用來描述 Service 物件的資料
name: nginx-service ## Service 的名稱
spec:
type: NodePort ## 指定Service的型別
selector:
service: http-server ## 對應那一個 Deployment 的標籤
ports:
- port: 80 ## 容器外 Port
targetPort: 80 ## 容器內 Port